// import http from 'wechat-http'

// // 接口基础地址
// http.baseURL = 'https://live-api.itheima.net'

// // 请求拦截器
// http.intercept.request = (options) => {
//   // 1. 取出token
//   const { token } = getApp()
//   // 2. 定义一个公共的请求头对象(放公共的属性)
//   const defaultHeader = {}
//   if (token) defaultHeader.Authorization = token
//   // 3. 把页面中的请求头对象和公共的请求头对象合并(页面的请求头必须放在后面)
//   options.header = Object.assign(defaultHeader, options.header)
//   return options
// }

// // 配置响应拦截器
// http.intercept.response = async ({ statusCode, data, config }) => {
//   // console.log(statusCode, data, config)
//   const app = getApp()

//   // 1. 判断token失效并延长token
//   if (statusCode === 401) {
//     // ------------判断refreshToken也失效-begin-------------------
//     if (config.url.includes('/refreshToken')) {
//       // 2.0.1 获取页面栈
//       const pageStack = getCurrentPages()
//       // 2.0.2 取出当前页面对象
//       const currentPage = pageStack[pageStack.length - 1]
//       // 2.0.3 取出当前页面对象的路径
//       const redirectURL = currentPage.route
//       // 2.1 拦截去登录页
//       return wx.redirectTo({
//         url: `/pages/login/index?redirectURL=/${redirectURL}`,
//       })
//     }
//     // -------------判断refreshToken也失效-end------------------

//     // 1.1 调用接口
//     const res = await wx.http({
//       url: '/refreshToken',
//       method: 'POST',
//       header: {
//         Authorization: app.refreshToken,
//       },
//     })
//     // 1.2 更新全局和本地的token以及refreshToken
//     if (res.code !== 10000) return
//     app.setToken(res.data.token)
//     app.setRefreshToken(res.data.refreshToken)

//     // console.log(config)
//     //-------------无感请求(把之前的请求再次发送)-begin---------------
//     return wx.http(Object.assign(config, { header: { Authorization: app.token } }))
//     //-------------无感请求(把之前的请求再次发送)-end---------------
//   }

//   // 拦截器处理后的响应结果
//   return data
// }

// // 挂载全局对象
// wx.http = http

// // 默认导出
// export default http
// 导入 http 模块
import http from 'wechat-http'

/**
 * 配置接口基础路径
 */
http.baseURL = 'https://live-api.itheima.net'

/**
 * 配置请求拦截器
 */
http.intercept.request = (params) => {
  // 读取全局实例中的 token
  const { token } = getApp()
  // 指定一个公共的头信息
  // 初始为空对象后续可以扩展
  const defaultHeader = {}
  // 追加 token 头信息
  if (token) defaultHeader.Authorization = token
  // 合并自定义头信息和公共头信息
  params.header = Object.assign(defaultHeader, params.header)
  // 处理后的请求参数
  return params
}

/**
 * 配置响应拦截器
 */
http.intercept.response = async ({ statusCode, data, config }) => {
  if (statusCode === 401) {

    // config 是调用接口的参数
    // refreshToken 过期的情形
    if (config.url.includes('/refreshToken')) {
      // 读取当前历史栈
      const pageStack = getCurrentPages()
      // 取出当前页面路径，登录成功能跳转到该页面
      const lastPage = pageStack[pageStack.length - 1]
      // 取出当前页面路径，登录成功能跳转到该页面
      const redirectURL = lastPage.route

      // 引导用户到登录页面
      return wx.redirectTo({
        url: `/pages/login/index?redirectURL=/${redirectURL}`,
      })
    }
    const app = getApp()
    // 如果本地没有 refresh_token 没有必要刷新 token
    if (!app.refresh_token) return
    // 获取全局应用实例

    // 使用refreshToken更新token
    const refreshToken = wx.getStorageSync('refresh_token')
    const res = await http({
      url: '/refreshToken',
      method: "POST",
      header: {
        Authorization: refreshToken,
      }
    })
    app.setToken(res.data.token, res.data.refreshToken)
    // 重新发起请求
    return http(
      Object.assign(config, {
        // 传递新的 token
        header: {
          Authorization: app.token,
        },
      })
    )
  }
  // 过滤接口返回的数据
  return data
}

/**
 * 挂载方法到全局
 */
wx.http = http
/**
 * 模块导出
 */
export default http